1055 集体照 (25 分)

您所在的位置:网站首页 班级集体照创意队形 小学生 1055 集体照 (25 分)

1055 集体照 (25 分)

2024-07-02 22:17| 来源: 网络整理| 查看: 265

1055 集体照 (25 分)

拍集体照时队形很重要,这里对给定的 N 个人 K 排的队形设计排队规则如下:

每排人数为 N/K(向下取整),多出来的人全部站在最后一排;

后排所有人的个子都不比前排任何人矮;

每排中最高者站中间(中间位置为 m/2+1,其中 m 为该排人数,除法向下取整);

每排其他人以中间人为轴,按身高非增序,先右后左交替入队站在中间人的两侧(例如5人身高为190、188、186、175、170,则队形为175、188、190、186、170。这里假设你面对拍照者,所以你的左边是中间人的右边);

若多人身高相同,则按名字的字典序升序排列。这里保证无重名。

现给定一组拍照人,请编写程序输出他们的队形。

输入格式: 每个输入包含 1 个测试用例。每个测试用例第 1 行给出两个正整数 N( ≤ 1 0 4 ≤10^4 ≤104​​ ,总人数)和 K(≤10,总排数)。随后 N 行,每行给出一个人的名字(不包含空格、长度不超过 8 个英文字母)和身高([30, 300] 区间内的整数)。

输出格式: 输出拍照的队形。即K排人名,其间以空格分隔,行末不得有多余空格。注意:假设你面对拍照者,后排的人输出在上方,前排输出在下方。

输入样例:

10 3 Tom 188 Mike 170 Eva 168 Tim 160 Joe 190 Ann 168 Bob 175 Nick 186 Amy 160 John 159

输出样例:

Bob Tom Joe Nick Ann Mike Eva Tim Amy John 题解 先把学生姓名和成绩读入并组成结构体依次读入并存放到vector数组中。自定义一个cmp规则,然后对该数组使用sort函数来排序。每排的站队情况是按中间最高然后依次左和右来输出。 例如由高到低排列的人物编号位12345,则排完的输出是42135,可以看出是偶数序列的倒序加上奇数序列。可利用队列的FIFO和栈的FILO来实现。偶数入栈,奇数入队,遍历完一行后,出栈、出队。

数据点如果是后三个错误,大概率是审题不仔细。 如果是段错误的话,那很可能就是把k当成了每排人数,把n/k当成了行,是错误的; 而题目中k表示行,真正的每排人数是n/k,最后一排的人数加上余出来的人,是n/k+n%k。

AC例程 #include #include #include #include #include #include using namespace std; struct node{ string name; int height; }; vectorv; bool cmp(node a,node b) { if(a.height!=b.height) return a.height>b.height; else return a.name


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3